/**
 * Created with IntelliJ IDEA
 * Description:
 * User:恋恋
 * Date:2022-10-18
 * Time:23:52
 */
class Food0{

}
class Fruit0 extends Food0{

}
class Apple0 extends Fruit0{

}
class Message0<T>{
    private T message;

    public T getMessage() {
        return message;
    }

    public void setMessage(T message) {
        this.message = message;
    }
}
public class TestDemo6 {
    public static void fun(Message0<? super Fruit0> temp){ //?只能是Fruit0本身或者是Fruit0父类
        System.out.println("========写入==============");
        //temp.setMessage(new Food0());
        //编译错误，原因是此时temp只可能是Fruit0本身或者是Fruit0的父类，当temp为Fruit0本身时，传递过去会产生向下转型-不安全
        temp.setMessage(new Fruit0());
        temp.setMessage(new Apple0());
        //只可以写入Fruit0的子类或者它本身
        System.out.println("========读取==============");
        System.out.println(temp.getMessage());//可以直接读取
        //Fruit0 fruit0=temp.getMessage();
        //编译错误，原因：此时temp只可能是Fruit0本身或者是Fruit0的父类，当temp为Fruit0的父类时，传递给变量时，会发生向上转型-不安全

    }
    public static void main(String[] args) {
                Message0<Apple> message0=new Message0<>();
                message0.setMessage(new Apple());
                //fun(message0);--编译错误
                //  message0类型是Apple,不符合fun的方法
                Message0<Fruit0> message2=new Message0<>();
                message2.setMessage(new Fruit0());
                fun(message2);//message2类型是Fruit本身，符合fun参数的要求
        Message0<Food0> message3=new Message0<>();
        message3.setMessage(new Food0());
        fun(message3);//message3类型是Fruit的父类，符合fun参数的要求


         }

     }

